package Negocio;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="viajes")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
	    name="tipo",
	    discriminatorType=DiscriminatorType.STRING
	)
public class Viaje implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 8946800853272980461L;
	@Id
	@Column(name = "viaje_id" )
	@GeneratedValue(strategy = GenerationType.AUTO)
	private int viajeId;
	@Column(name="fecha_creacion")
	protected Date fechaCreacion;
	@Column(name="fecha_estimada_de_llegada")
	protected Date fechaEstimadaDeLLegada;
	@Column(name="fecha_real_de_llegada")
	protected Date fechaRealDeLLegada;
	@OneToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
	@JoinColumn(name = "viaje_id")
	protected List<Envio> envios;
	@ManyToOne(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
	@JoinColumn(name = "vehiculo_id")
	protected Vehiculo vehiculo;
	@Column(name= "entregado")
	protected boolean entregado;
	
	
	public Viaje() {
	}
	
	public Viaje(List<Envio> envios, Vehiculo vehiculo) {
		this.envios = envios;
		this.vehiculo = vehiculo;
	}

	public int getViajeId() {
		return viajeId;
	}

	public void setViajeId(int viajeId) {
		this.viajeId = viajeId;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}

	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public Date getFechaEstimadaDeLLegada() {
		return fechaEstimadaDeLLegada;
	}

	public void setFechaEstimadaDeLLegada(Date fechaEstimadaDeLLegada) {
		this.fechaEstimadaDeLLegada = fechaEstimadaDeLLegada;
	}

	public Date getFechaRealDeLLegada() {
		return fechaRealDeLLegada;
	}

	public void setFechaRealDeLLegada(Date fechaRealDeLLegada) {
		this.fechaRealDeLLegada = fechaRealDeLLegada;
	}

	public List<Envio> getEnvios() {
		return envios;
	}

	public void setEnvios(List<Envio> envios) {
		this.envios = envios;
	}

	public Vehiculo getVehiculo() {
		return vehiculo;
	}

	public void setVehiculo(Vehiculo vehiculo) {
		this.vehiculo = vehiculo;
	}

	public boolean isEntregado() {
		return entregado;
	}

	public void setEntregado(boolean entregado) {
		this.entregado = entregado;
	}

	public void entregado() {
		this.setEntregado(true);
		this.fechaRealDeLLegada = new Date();
	}
}
